home *** CD-ROM | disk | FTP | other *** search
/ MacGames Sampler / PHT MacGames Bundle.iso / MacSource Folder / Samples from the CD / C and C++ / flight simulator ƒ / flight.c < prev    next >
C/C++ Source or Header  |  1989-11-09  |  6KB  |  347 lines

  1. /*
  2. #include <EventMgr.h>
  3. #include <WindowMgr.h>
  4. #include <MenuMgr.h>
  5. #include <DeskMgr.h>
  6. */
  7. #include <defines.h>
  8.  
  9.  
  10. /* menus */
  11. #define MENU_APPLE    1
  12. #define MENU_FILE    2
  13. #define MENU_EDIT    3
  14.  
  15.  
  16. /* windows */
  17. #define MENU_BAR_HEIGHT    20
  18. #define SCREEN_WIDTH    512
  19. #define SCREEN_HEIGHT    342
  20. #define SCREEN_MARGIN    4
  21. #define TITLE_BAR_HEIGHT    18    
  22. #define inZoomIn    7
  23. #define inZoomOut    8
  24.  
  25. #define WIND_MAIN    128
  26. WindowPtr        theWind;    /*the main window*/
  27. WindowRecord    windRecord;    /*storage for the window*/
  28.  
  29. #define    pass(x) (x)
  30.  
  31. #define ALRT_ABOUT    128
  32.  
  33.  
  34. #define    MOUSE_POS    (*(Point *)(0x830))
  35.  
  36. pascal short            OpenResFile()            =    0xa997;
  37.  
  38. GrafPtr            windManPort;    /*window manager port*/
  39. EventRecord     theEvent;    /*the main event*/
  40.  
  41.  
  42. MenuHandle        appleMenu, fileMenu, editMenu;
  43.  
  44. main()
  45. {
  46.     Init();
  47.     MakeMenus();
  48.     MakeWindow();
  49.     AddrsSet();
  50.  
  51.     MakeGrid();
  52.  
  53.     while (1)
  54.     {
  55.         SystemTask();
  56.         if (GetNextEvent(everyEvent, &theEvent))
  57.             DoEvent();
  58.     }
  59. }
  60.  
  61. DoEvent()
  62. {
  63.     switch (theEvent.what) {
  64.     case mouseDown:
  65.         DoMouseDown();
  66.         break;
  67.     case keyDown:
  68.     case autoKey:
  69.         DoKeyDown();
  70.         break;
  71.     case updateEvt:
  72.         DoUpdate();
  73.         break;
  74.     case diskEvt:
  75.         break;
  76.     case activateEvt:
  77.         DoActivate();
  78.         break;
  79.     }
  80. }
  81.  
  82. DoMouseDown()
  83. {
  84.     int thePart;
  85.     WindowPtr whichWindow;
  86.  
  87.     thePart = FindWindow( pass(theEvent.where), &whichWindow);
  88.  
  89.     switch (thePart) {
  90.     case inDesk:
  91.         break;
  92.     case inMenuBar:
  93.         DoMenuClick();
  94.         break;
  95.     case inSysWindow:
  96.         SystemClick(&theEvent, whichWindow);
  97.         break;
  98.     case inContent:
  99.         DoContent(whichWindow);
  100.         break;
  101.     case inDrag:
  102.         DoDrag(whichWindow);
  103.         break;
  104.     case inGrow:
  105.         DoGrow(whichWindow);
  106.         break;
  107.     case inGoAway:
  108.         if (TrackGoAway(whichWindow, pass(theEvent.where)))
  109.             DoQuit();
  110.         break;
  111.     case inZoomIn:
  112.     case inZoomOut:
  113.         DoZoom(whichWindow, thePart);
  114.         break;
  115.     }
  116. }
  117.  
  118. DoMenuClick()
  119. {
  120.     long menuChoice;
  121.  
  122.     menuChoice = MenuSelect( pass(theEvent.where));
  123.     DoMenuChoice(menuChoice);
  124. }
  125.  
  126. DoMenuChoice(menuChoice)
  127. long menuChoice;
  128. {
  129.     switch(HiWord(menuChoice)) {
  130.     case MENU_APPLE:
  131.         DoAppleChoice( LoWord(menuChoice) );
  132.         break;
  133.     case MENU_FILE:
  134.         DoFileMenu(LoWord(menuChoice));
  135.         break;
  136.     case MENU_EDIT:
  137.         DoEditMenu(LoWord(menuChoice));
  138.         break;
  139.     }
  140.  
  141.     HiliteMenu(0); /* unhilight the selected menu */
  142. }
  143.  
  144. DoAppleChoice(theItem)
  145. int theItem;
  146. {
  147.     char    accName[256];
  148.     int        accNum, i;
  149.     
  150.     if (theItem EQ 1)    
  151.         Alert(ALRT_ABOUT, NIL);
  152.     else
  153.     {
  154.         GetItem(appleMenu, theItem, accName);
  155.         accNum = OpenDeskAcc(accName);
  156.     }
  157. }
  158.  
  159. DoFileMenu(theItem)
  160. int theItem;
  161. {
  162.     if (theItem EQ 1)
  163.         DoQuit();
  164. }
  165.  
  166. DoQuit()
  167. {
  168.     ExitToShell();
  169. }
  170.  
  171. DoEditMenu(theItem)
  172. int theItem;
  173. {
  174.     switch(theItem) {
  175.     case 1: /* Undo */
  176.         SystemEdit(undoCmd);
  177.         break;
  178.     case 3: /* Cut */
  179.         SystemEdit(cutCmd);
  180.         break;
  181.     case 4: /* Copy */
  182.         SystemEdit(copyCmd);
  183.         break;
  184.     case 5: /* Paste */
  185.         SystemEdit(pasteCmd);
  186.         break;
  187.     case 6: /* Clear */
  188.         SystemEdit(clearCmd);
  189.         break;
  190.     }
  191. }
  192.  
  193. DoContent(whichWindow)
  194. WindowPtr whichWindow;
  195. {
  196.     Point    localPt;
  197.  
  198.     if (whichWindow NEQ FrontWindow())
  199.         SelectWindow(whichWindow);
  200.     else
  201.     {
  202.         localPt = theEvent.where;
  203.         GlobalToLocal(&localPt);
  204.         DoMouseMove(&localPt);
  205.     }
  206. }
  207.  
  208. DoDrag(whichWindow)
  209. WindowPtr whichWindow;
  210. {
  211.     Rect limitRect;
  212.  
  213.     if (whichWindow NEQ FrontWindow())
  214.         SelectWindow(whichWindow);
  215.     else
  216.     {
  217.         SetRect(&limitRect, 0, MENU_BAR_HEIGHT, 5000, 5000);
  218.         DragWindow(whichWindow, pass(theEvent.where), &limitRect);
  219.     }
  220. }
  221.  
  222. DoGrow(whichWindow)
  223. WindowPtr whichWindow;
  224. {
  225.     Rect limitRect;
  226.     long    newSize;
  227.  
  228. return;
  229.     SetRect(&limitRect, 50, 50, 2000, 2000);
  230.     newSize = GrowWindow(whichWindow, pass(theEvent.where), &limitRect);
  231.     if (newSize)
  232.     {
  233.         EraseRect(&whichWindow->portRect);
  234.         SizeWindow(whichWindow, LoWord(newSize), HiWord(newSize), TRUE);
  235.     }
  236. }
  237.  
  238. DoKeyDown()
  239. {
  240.     char    ch;
  241.     long    menuChoice;
  242.     
  243.     ch = (char)(theEvent.message & charCodeMask);
  244.     
  245.     if ((theEvent.modifiers & cmdKey)
  246.         AND (theEvent.what NEQ autoKey)) /* ignore repeats */
  247.     {
  248.         menuChoice = MenuKey(ch);
  249.         if (menuChoice)
  250.             DoMenuChoice(menuChoice);
  251.     }
  252. }
  253.  
  254. DoUpdate()
  255. {
  256.     GrafPtr savePort;        /* to save and restore the old port */
  257.     WindowPtr whichWindow;
  258.  
  259.     whichWindow = (WindowPtr) (theEvent.message);
  260.  
  261.     BeginUpdate(whichWindow);    /* reset ClipRgn etc to only redraw what's
  262.                                necessary. */
  263.  
  264.         GetPort(&savePort);        /* don't trash the port; we might be
  265.                                    updating an inactive window */
  266.         SetPort(whichWindow);    /* work in the specified window */
  267.  
  268.         EraseRect(&(whichWindow->portRect));
  269.         if (whichWindow EQ theWind)
  270.             /*DrawGrowIcon(whichWindow);*/
  271.  
  272.     EndUpdate(whichWindow);
  273.  
  274.     SetPort(savePort);
  275. }
  276.  
  277. DoActivate()
  278. {
  279.     WindowPtr whichWindow;
  280.  
  281.     whichWindow = (WindowPtr) (theEvent.message);
  282.     if (whichWindow EQ theWind)
  283.         /*DrawGrowIcon(whichWindow);*/
  284.  
  285.     if (theEvent.modifiers & activeFlag)
  286.         SetPort(whichWindow);
  287. }
  288.  
  289. DoZoom(whichWindow, thePart)
  290. WindowPtr    whichWindow;
  291. int            thePart;
  292. {
  293. return;
  294.  
  295.     if (TrackBox(whichWindow, pass(theEvent.where), thePart))
  296.         ZoomWindow(whichWindow, thePart, TRUE);
  297. }
  298.  
  299.  
  300.  
  301. Init()
  302. {
  303.     pascal void restartProc();
  304.  
  305.     InitGraf(&thePort);
  306.     InitFonts();
  307.     InitWindows();
  308.     InitMenus();
  309.     TEInit();
  310.     InitDialogs(restartProc);        
  311.     InitCursor();
  312.     
  313.     FlushEvents(everyEvent, 0);
  314.  
  315.     GetWMgrPort(&windManPort);    /* get whole screen port that window mgr
  316.                    uses */
  317.     SetPort(windManPort);    /* and start off with it */
  318.  
  319.     SetEventMask(everyEvent);
  320. }
  321.  
  322. /* when the world comes to an end */
  323. pascal void
  324. restartProc()
  325. {
  326.     ExitToShell();
  327. }
  328.  
  329. MakeMenus()
  330. {
  331.     appleMenu = GetMenu(MENU_APPLE);
  332.     AddResMenu(appleMenu, 'DRVR');
  333.     InsertMenu(appleMenu, 0);
  334.     
  335.     fileMenu = GetMenu(MENU_FILE);
  336.     InsertMenu(fileMenu, 0);
  337.     
  338.     editMenu = GetMenu(MENU_EDIT);
  339.     InsertMenu(editMenu, 0);
  340.     
  341.     DrawMenuBar();
  342. }
  343.  
  344. MakeWindow()
  345. {
  346.     theWind = GetNewWindow(WIND_MAIN, &windRecord, -1L);    
  347. }